lambda soup
I/O
entry point (message)
output (message send)
Persistence
KVS
keyごとにlockされる
valueは1B~X GBまで自由
Compute
independent functions
実効継続時間: 1ns ~ 1weekとか
大きさは1B~X GB
みたいなもの
外界interface
RegisterFunction(code string) -> FnId
ExecFunction(fid FnId, arg any, policy ExecPolicy) -> async any
ExecPolicy
時間・コストの使い方を指定
Functionが使えるinterface
WriteV(key string, val any) -> async ()
ReadV(key string) -> async any
Call(fid FnId, args any) -> async any
このようなinterfaceを持つ系を、「何でも書ける」ぐらい高効率に実装することは可能だろうか?
ExecPolicyがゆるゆるならめっちゃ簡単
厳しいExecPolicyにどれぐらい対応できるか
FunctionがNNの計算になってる & GPUじゃないと間に合わないようなExecPolicy GPUに自動配置
Functionが100万人のデータをなめるバッチ処理
10d以内という指示
1s以内という指示
on-memory cache, 並列化
「実行不能」がどのタイミングでわかるか
ここが予測不可能すぎると実質役に立たない
実はそうでもない?
CUI
Functionの記述言語はできるだけ生のデータ・計算依存関係を記述できると最適化余地が広がる
WriteV/ReadV/Call以外は完全に副作用freeなことが保証されている
どのぐらい分析できる??
あれを言語レベルでやったようなもの
32bit変数に3bitしか入れてないとかは解析で分かるのは厳しい
めちゃくちゃ抽象的でいい
ただし、物理限界についてはどこまでも具体的に記述できるべき
複雑性の記述は主目的ではない
それは書き手の責任です、でよい
types
PrimTy = unique_id | bytes | string | float | int
ConcTy = PrimTy | set ConcTy | list ConcTy | map ConcTy ConcTy
AbsTy = ConcTy | DerivedTy
DerivedTy = Id TypeClause*
TypeClause = Id ConcTy*
concrete types
int<0+,3b>{0-centered}
基本型情報
確定制約情報
確率制約情報